#ifndef CSHAPE_H
#define CSHAPE_H
#include <QGraphicsItem>
#include <QAbstractGraphicsShapeItem>
#include <QPen>
#include <Qbrush>
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
#include <QCursor>
#include <QStyleOptionGraphicsItem>
/*
CShape类：
继承于QAbstractGraphicsShapeItem
用于提供公共接口（几乎全部来自其父类QAbstractGraphicsShapeItem）及基本属性
其中：
    setPen(const QPen& pen) 用于更改线条颜色与粗细
    setBrush(const QBrush& brush) 用于更改填充
    ...
    等均继承于父类，且可以直接调用
*/

typedef enum WITCHGRAPHIC {
    NOACTION, LINE, RECTANGLE, ELLIPSE,BEZIER,TRIANGLE
} WitchGraphic;// 操作类型标记

typedef enum CONTROLPOINTS {
    S1, S2, E1, E2, ML, MR, MD, MU
} ControlPoints;// 控制点标记
const QSizeF POINT_SIZE(20,20);

class CShape : public QAbstractGraphicsShapeItem
{
public:
    CShape(QPointF start, QPointF end, int Width = 1, QColor color = "black", QBrush brush_input = Qt::NoBrush);
    CShape(qreal start_x,qreal start_y, qreal end_x, qreal end_y,int Width = 1, QColor color = "black", QBrush brush_input = Qt::NoBrush);

    // 更改points[S1] points[E1]
    void SetStartandEnd (QPointF start, QPointF end);
    void SetStartandEnd (qreal start_x,qreal start_y, qreal end_x, qreal end_y);

    // 生成控制点（前提：前4个points存在）
    void GenerateControlPoints();
    // 复制另一个CShape对象的控制点

protected:

    // 记录8个控制点
    QPointF points[8];
    // 生成以8个控制点为中心满足POINT_SIZE的矩形框
    QRectF PointsforDraw[8];
    //旋转标志，判断是否要旋转
    bool isRotating;
    // 旋转用起始点
    QPointF BeginScenePos;
    //记录图形项的初始变换矩阵
    QTransform BeginTransform;
    // 记录当前被选中的控制点
    int WitchPointsisSelected;
    // 绘制边界框和控制点
    void PaintBoundingandControlPoints(QPainter *painter, QRectF boundingRect);

    // 移动控制点(前提：WitchPointsisSelected！=-1, 即移动WitchPointsisSelected对应的控制点)
    void MoveControlPoint(QPointF CurrenPos);
    // 旋转支持(MouseMoveEvent)
    void SupportRotate(QPointF CurrentScenePos, QPointF CenterScenePos);
};

#endif // CSHAPE_H
